package com.itaming.lycheeframework.support.utils;

import com.itaming.lycheeframework.common.constant.FrameworkConstant;
import lombok.experimental.UtilityClass;
import org.springframework.util.Assert;

import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.Charset;

/**
 * URL工具类
 *
 * @author A.Ming
 */
@UtilityClass
public class URLUtil {

    /**
     * 编码
     *
     * <p>
     * 默认使用 UTF-8 字符集，指定字符集请使用 {@link #encode(String, Charset)}
     *
     * @param url URL 字符串
     * @return 处理后的 URL 字符串
     */
    public static String encode(String url) {
        return encode(url, FrameworkConstant.DEFAULT_CHARSET);
    }

    /**
     * 编码
     *
     * @param url     URL 字符串
     * @param charset 字符集
     * @return 处理后的 URL 字符串
     */
    public static String encode(String url, Charset charset) {
        Assert.notNull(charset, "Charset must not be null");
        return URLEncoder.encode(url, charset);
    }

    /**
     * 解码
     *
     * <p>
     * 默认使用 UTF-8 字符集，指定字符集请使用 {@link #decode(String, Charset)}
     *
     * @param url URL 字符串
     * @return 处理后的 URL 字符串
     */
    public static String decode(String url) {
        return decode(url, FrameworkConstant.DEFAULT_CHARSET);
    }

    /**
     * 解码
     *
     * @param url     URL 字符串
     * @param charset 字符集
     * @return 处理后的 URL 字符串
     */
    public static String decode(String url, Charset charset) {
        Assert.notNull(charset, "Charset must not be null");
        return URLDecoder.decode(url, charset);
    }

}
